package org.dtrd.modules.patient.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.dtrd.modules.patient.entity.bean.BasePatientInfo;
import org.dtrd.modules.patient.entity.bean.PatientPageInfo;
import org.dtrd.modules.patient.entity.po.DtrdEntRdPatient;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface DtrdEntRdPatientMapper extends BaseMapper<DtrdEntRdPatient> {

    List<Integer> getAllPatientIdList();

    /**
     * 通过 groupId 分页查询患者
     */
    IPage<PatientPageInfo> selectPageByGroupId(IPage<PatientPageInfo> basicPage, @Param("groupId") Integer groupId);

    /**
     * 分页查询没有设置分组的患者
     */
    IPage<PatientPageInfo> selectPageNoGroup(IPage<PatientPageInfo> page);

    /**
     * 根据手机号查询记录
     * @param mobile
     * @return
     */
    DtrdEntRdPatient selectRecordByMobile(@Param("mobile") String mobile);

    /**
     * 更新患者的 unionid 和 openid
     */
    void updatePatientUnionIdAndWxOpenid(@Param("patientId") Integer patientId,
                                         @Param("unionid") String unionid,
                                         @Param("openid") String openid);

    /**
     * 更新患者的 unionid 即 公众号openid
     */
    void updatePatientUnionIdAndWxOaOpenid(@Param("patientId") Integer patientId,
                                           @Param("unionid") String unionid,
                                           @Param("officialAccountsOpenid") String officialAccountsOpenid);

    /**
     * 判断是否是有效的 patientId
     */
    boolean hasPatientId(@Param("patientId") Integer patientId);

    String getPatientOpenIdByPatientId(@Param("dataId") Integer patientId);

    DtrdEntRdPatient selectByUnionIdOrOpenIdOrWxOaOpenId(@Param("unionid") String unionId, @Param("wxOaOpenId") String wxOaOpenId, @Param("openId") String openId);

    void deletePatientRecord(@Param("dataId") Integer dataId);

    BasePatientInfo getPatientBaseInfo(Integer patientId);
}